#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@author António Delgado
@date: 15/10/14
@obs: Módulo referente à criação da interface gráfica
da aplicação
"""

import sys
from Tkinter import *
import create_db
import plot_statistics
import get_data_db
import tkMessageBox

class MainWindow(object):
	"""
	Classe responsável pela criação de toda a 
	interface gráfica da aplicação
	"""
	def __init__(self, window_title):
		super(MainWindow, self).__init__()
		self.window_title = window_title

		self.window = Tk()

		# Cria a base de dados ao iniciar o sistema
		create_db.init_sqlalchemy()

		self.first_year = ""
		self.last_year = ""

		self.init_views(window_title)

		self.window.mainloop()

	def init_views(self, window_title):
		"""
		Inicia as views da janela principal do sistema
		"""
		self.window.title(window_title)
		self.window.geometry('600x450')

		first_step_label = Label(self.window, text = 'Primeiro passo', font=("Arial", 16)).pack()

		create_bd_btn = Button(self.window, text = 'Criar Base de Dados', command = self.create_bd).pack()

		separator = Frame(self.window, height = 2, width = 300, bg="blue").pack()

		first_year = Label(self.window, text = 'Escolha o primeiro ano', font=("Arial", 16)).pack()
		self.comboboxFirstYear()

		last_year = Label(self.window, text = 'Escolha o último ano', font=("Arial", 16)).pack()
		self.comboboxLastYear()

		separator = Frame(self.window, height = 2, width = 300, bg="blue").pack()

		statistics_label = Label(self.window, text = 'Estatísticas', font=("Arial", 16)).pack()

		ipc_stat_btn = Button(self.window, text = 'Índice de preços ao consumidor', command = self.ipc_stat_event).pack()
		inflation_rate_stat_btn = Button(self.window, text = 'Taxa de inflação', command = self.inflation_rate_stat_event).pack()
		minimum_monthly_pay_stat_btn = Button(self.window, text = 'Remuneração MÍNIMA Mensal', command = self.minimum_monthly_pay_stat_event).pack()
		maximum_monthly_pay_stat_btn = Button(self.window, text = 'Remuneração MÁXIMA Mensal', command = self.maximum_monthly_pay_stat_event).pack()
		maximum_minimum_salaries_stat_btn = Button(self.window, text = 'Remunerações máximas e mínimas', command = self.maximum_minimum_salaries_stat_event).pack()
		pib_per_capita_stat_btn = Button(self.window, text = 'PIB per capita', command = self.pib_per_capita_stat_event).pack()
		rnb_per_capita_stat_btn = Button(self.window, text = 'RNB per capita', command = self.rnb_per_capita_stat_event).pack()
		rdb_per_capita_stat_btn = Button(self.window, text = 'RDB per capita', command = self.rdb_per_capita_stat_event).pack()
		per_capita_annual_remuneration_stat_btn = Button(self.window, text = 'Remunerações per capita anuais', command = self.per_capita_annual_remuneration_stat_event).pack()
		pass

	def comboboxFirstYear(self):
		box_value = StringVar()
		
		data = get_data_db.GetData()

		self.box_first_year = OptionMenu(self.window, box_value, *data.get_years_col(), command = self.set_first_combobox_value).pack()
        pass

	def comboboxLastYear(self):
		box_value = StringVar()
		
		data = get_data_db.GetData()

		self.box_last_year = OptionMenu(self.window, box_value, *data.get_years_col(), command = self.set_last_combobox_value).pack()
        pass

	def set_first_combobox_value(self, selection):
		"""
		Altera o valor da variável first_year 
		consoante o ano escolhido na combobox
		"""
		self.first_year = selection
		pass

	def set_last_combobox_value(self, selection):
		"""
		Altera o valor da variável last_year 
		consoante o ano escolhido na combobox
		"""
		self.last_year = selection
		pass

	def create_bd(self):
		"""
		Evento responsável por criar a base de dados
		"""
		create_db.init_sqlalchemy()
		pass
	
	def ipc_stat_event(self):
		"""
		Evento responsável por iniciar a primeira estatística
		"""
		if (self.first_year == "") | (self.last_year == ""):
			tkMessageBox.showinfo(u'Atenção!', 'Escolha os anos')
			pass
		else:
			plot_statistics.Graphics("ipc_stat", self.first_year, self.last_year)
			pass
		pass

	def inflation_rate_stat_event(self):
		"""
		Evento responsável por iniciar a segunda estatística
		"""
		if (self.first_year == "") | (self.last_year == ""):
			tkMessageBox.showinfo(u'Atenção!', 'Escolha os anos')
			pass
		else:
			plot_statistics.Graphics("inflation_rate_stat", self.first_year, self.last_year)
			pass
		pass

	def minimum_monthly_pay_stat_event(self):
		"""
		Evento responsável por iniciar a terceira estatística
		"""
		if (self.first_year == "") | (self.last_year == ""):
			tkMessageBox.showinfo(u'Atenção!', 'Escolha os anos')
			pass
		else:
			plot_statistics.Graphics("minimum_monthly_pay_stat", self.first_year, self.last_year)
			pass
		pass

	def maximum_monthly_pay_stat_event(self):
		"""
		Evento responsável por iniciar a quarta estatística
		"""
		if (self.first_year == "") | (self.last_year == ""):
			tkMessageBox.showinfo(u'Atenção!', 'Escolha os anos')
			pass
		else:
			plot_statistics.Graphics("maximum_monthly_pay_stat", self.first_year, self.last_year)
			pass
		pass

	def maximum_minimum_salaries_stat_event(self):
		"""
		Evento responsável por iniciar a quinta estatística
		"""
		if (self.first_year == "") | (self.last_year == ""):
			tkMessageBox.showinfo(u'Atenção!', 'Escolha os anos')
			pass
		else:
			plot_statistics.Graphics("maximum_minimum_salaries_stat", self.first_year, self.last_year)
			pass
		pass

	def pib_per_capita_stat_event(self):
		"""
		Evento responsável por iniciar a sexta estatística
		"""
		if (self.first_year == "") | (self.last_year == ""):
			tkMessageBox.showinfo(u'Atenção!', 'Escolha os anos')
			pass
		else:
			plot_statistics.Graphics("pib_per_capita_stat", self.first_year, self.last_year)
			pass
		pass

	def rnb_per_capita_stat_event(self):
		"""
		Evento responsável por iniciar a sétima estatística
		"""
		if (self.first_year == "") | (self.last_year == ""):
			tkMessageBox.showinfo(u'Atenção!', 'Escolha os anos')
			pass
		else:
			plot_statistics.Graphics("rnb_per_capita_stat", self.first_year, self.last_year)
			pass
		pass

	def rdb_per_capita_stat_event(self):
		"""
		Evento responsável por iniciar a oitava estatística
		"""
		if (self.first_year == "") | (self.last_year == ""):
			tkMessageBox.showinfo(u'Atenção!', 'Escolha os anos')
			pass
		else:
			plot_statistics.Graphics("rdb_per_capita_stat", self.first_year, self.last_year)
			pass
		pass

	def per_capita_annual_remuneration_stat_event(self):
		"""
		Evento responsável por iniciar a nona estatística
		"""
		if (self.first_year == "") | (self.last_year == ""):
			tkMessageBox.showinfo(u'Atenção!', 'Escolha os anos')
			pass
		else:
			plot_statistics.Graphics("per_capita_annual_remuneration_stat", self.first_year, self.last_year)
			pass
		pass
		
def main():
    windowFrame = MainWindow("Evolução dos Salários da Função Pública em Portugal")
    windowFrame.window.mainloop()  

if __name__ == '__main__':
    main()